home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / sched.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  7KB  |  206 lines

  1. /* Definitions of constants and data structure for POSIX 1003.1b-1993
  2.    scheduling interface.
  3.    Copyright (C) 1996-1999,2001-2003,2005,2006,2007,2008
  4.    Free Software Foundation, Inc.
  5.    This file is part of the GNU C Library.
  6.  
  7.    The GNU C Library is free software; you can redistribute it and/or
  8.    modify it under the terms of the GNU Lesser General Public
  9.    License as published by the Free Software Foundation; either
  10.    version 2.1 of the License, or (at your option) any later version.
  11.  
  12.    The GNU C Library is distributed in the hope that it will be useful,
  13.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.    Lesser General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU Lesser General Public
  18.    License along with the GNU C Library; if not, write to the Free
  19.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  20.    02111-1307 USA.  */
  21.  
  22. #ifndef __need_schedparam
  23.  
  24. #ifndef _SCHED_H
  25. # error "Never include <bits/sched.h> directly; use <sched.h> instead."
  26. #endif
  27.  
  28.  
  29. /* Scheduling algorithms.  */
  30. #define SCHED_OTHER    0
  31. #define SCHED_FIFO    1
  32. #define SCHED_RR    2
  33. #ifdef __USE_GNU
  34. # define SCHED_BATCH    3
  35. #endif
  36.  
  37. #ifdef __USE_MISC
  38. /* Cloning flags.  */
  39. # define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
  40. # define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
  41. # define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
  42. # define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
  43. # define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
  44. # define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
  45. # define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
  46.                      wake it up on mm_release.  */
  47. # define CLONE_PARENT  0x00008000 /* Set if we want to have the same
  48.                      parent as the cloner.  */
  49. # define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
  50. # define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
  51. # define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
  52. # define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
  53. # define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
  54.                        before MM copy.  */
  55. # define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
  56.                         location to clear.  */
  57. # define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
  58. # define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
  59.                       force CLONE_PTRACE on this clone.  */
  60. # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
  61.                       the child.  */
  62. # define CLONE_NEWUTS    0x04000000    /* New utsname group.  */
  63. # define CLONE_NEWIPC    0x08000000    /* New ipcs.  */
  64. # define CLONE_NEWUSER    0x10000000    /* New user namespace.  */
  65. # define CLONE_NEWPID    0x20000000    /* New pid namespace.  */
  66. # define CLONE_NEWNET    0x40000000    /* New network namespace.  */
  67. # define CLONE_IO    0x80000000    /* Clone I/O context.  */
  68. #endif
  69.  
  70. /* The official definition.  */
  71. struct sched_param
  72.   {
  73.     int __sched_priority;
  74.   };
  75.  
  76. __BEGIN_DECLS
  77.  
  78. #ifdef __USE_MISC
  79. /* Clone current process.  */
  80. extern int clone (int (*__fn) (void *__arg), void *__child_stack,
  81.           int __flags, void *__arg, ...) __THROW;
  82.  
  83. /* Unshare the specified resources.  */
  84. extern int unshare (int __flags) __THROW;
  85.  
  86. /* Get index of currently used CPU.  */
  87. extern int sched_getcpu (void) __THROW;
  88. #endif
  89.  
  90. __END_DECLS
  91.  
  92. #endif    /* need schedparam */
  93.  
  94. #if !defined __defined_schedparam \
  95.     && (defined __need_schedparam || defined _SCHED_H)
  96. # define __defined_schedparam    1
  97. /* Data structure to describe a process' schedulability.  */
  98. struct __sched_param
  99.   {
  100.     int __sched_priority;
  101.   };
  102. # undef __need_schedparam
  103. #endif
  104.  
  105.  
  106. #if defined _SCHED_H && !defined __cpu_set_t_defined
  107. # define __cpu_set_t_defined
  108. /* Size definition for CPU sets.  */
  109. # define __CPU_SETSIZE    1024
  110. # define __NCPUBITS    (8 * sizeof (__cpu_mask))
  111.  
  112. /* Type for array elements in 'cpu_set_t'.  */
  113. typedef unsigned long int __cpu_mask;
  114.  
  115. /* Basic access functions.  */
  116. # define __CPUELT(cpu)    ((cpu) / __NCPUBITS)
  117. # define __CPUMASK(cpu)    ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))
  118.  
  119. /* Data structure to describe CPU mask.  */
  120. typedef struct
  121. {
  122.   __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
  123. } cpu_set_t;
  124.  
  125. /* Access functions for CPU masks.  */
  126. # if __GNUC_PREREQ (2, 91)
  127. #  define __CPU_ZERO_S(setsize, cpusetp) \
  128.   do __builtin_memset (cpusetp, '\0', setsize); while (0)
  129. # else
  130. #  define __CPU_ZERO_S(setsize, cpusetp) \
  131.   do {                                          \
  132.     size_t __i;                                      \
  133.     size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  134.     __cpu_mask *__bits = (cpusetp)->__bits;                      \
  135.     for (__i = 0; __i < __imax; ++__i)                          \
  136.       __bits[__i] = 0;                                  \
  137.   } while (0)
  138. # endif
  139. # define __CPU_SET_S(cpu, setsize, cpusetp) \
  140.   (__extension__                                  \
  141.    ({ size_t __cpu = (cpu);                              \
  142.       __cpu < 8 * (setsize)                              \
  143.       ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]              \
  144.      |= __CPUMASK (__cpu))                              \
  145.       : 0; }))
  146. # define __CPU_CLR_S(cpu, setsize, cpusetp) \
  147.   (__extension__                                  \
  148.    ({ size_t __cpu = (cpu);                              \
  149.       __cpu < 8 * (setsize)                              \
  150.       ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]              \
  151.      &= ~__CPUMASK (__cpu))                              \
  152.       : 0; }))
  153. # define __CPU_ISSET_S(cpu, setsize, cpusetp) \
  154.   (__extension__                                  \
  155.    ({ size_t __cpu = (cpu);                              \
  156.       __cpu < 8 * (setsize)                              \
  157.       ? ((((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)]          \
  158.       & __CPUMASK (__cpu))) != 0                          \
  159.       : 0; }))
  160.  
  161. # define __CPU_COUNT_S(setsize, cpusetp) \
  162.   __sched_cpucount (setsize, cpusetp)
  163.  
  164. # if __GNUC_PREREQ (2, 91)
  165. #  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
  166.   (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
  167. # else
  168. #  define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
  169.   (__extension__                                  \
  170.    ({ __cpu_mask *__arr1 = (cpusetp1)->__bits;                      \
  171.       __cpu_mask *__arr2 = (cpusetp2)->__bits;                      \
  172.       size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  173.       size_t __i;                                  \
  174.       for (__i = 0; __i < __imax; ++__i)                      \
  175.     if (__bits[__i] != __bits[__i])                          \
  176.       break;                                  \
  177.       __i == __imax; }))
  178. # endif
  179.  
  180. # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
  181.   (__extension__                                  \
  182.    ({ cpu_set_t *__dest = (destset);                          \
  183.       __cpu_mask *__arr1 = (srcset1)->__bits;                      \
  184.       __cpu_mask *__arr2 = (srcset2)->__bits;                      \
  185.       size_t __imax = (setsize) / sizeof (__cpu_mask);                  \
  186.       size_t __i;                                  \
  187.       for (__i = 0; __i < __imax; ++__i)                      \
  188.     ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i];    \
  189.       __dest; }))
  190.  
  191. # define __CPU_ALLOC_SIZE(count) \
  192.   ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))
  193. # define __CPU_ALLOC(count) __sched_cpualloc (count)
  194. # define __CPU_FREE(cpuset) __sched_cpufree (cpuset)
  195.  
  196. __BEGIN_DECLS
  197.  
  198. extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
  199.   __THROW;
  200. extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur;
  201. extern void __sched_cpufree (cpu_set_t *__set) __THROW;
  202.  
  203. __END_DECLS
  204.  
  205. #endif
  206.